Session 与 Cookie
时间: 作者:梧桐
背景
因为HTTP协议无状态的,服务器无法区分客户端请求,不能保存每次交互的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就都丢掉了。如果用户发来一个新的请求,服务器也无法知道它是否与上次的请求有联系。所以要想服务器与客户端有联系,就要说Cookie与Session。
Cookie
定义
Cookie是为了辨别用户身份随HTTP请求一起被传递的数据, 存储在客户端硬盘或内存中,
内容主要包括:名字,值,过期时间,路径和域。。
Session
定义
Session是客户端和服务端之间的一段交互过程的状态信息,保存在服务器端,Session的id保存在客户机的cookie中,也可以不启用Session。
联系
当客户端通过 HTTP 协议访问服务器,服务器需要创建session的时候,
首先检查请求里是否已包含sessionId,如果已包含,则以前已经为此客户端创建过session,服务器就按照sessionId查询相应信息;也有可能sessionId已经失效,服务器端则会创建新的session;如果客户端请求不包含sessionId,则为此客户端创建一个session,并且生成一个与此session对应的sessionId,sessionId返回给客户端保存,即存储在cookie中,一般cookie的名字默认SEEESIONID.

其他
Cookie的生命周期属性为Max-age,不同浏览器的设置可能不同。不设置过期时间,这个Cookie生命周期为浏览器会话期间,只要关闭浏览器,Cookie就消失了。如果设置了过期时间,浏览器就会把Cookie保存到硬盘上,再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。
Cookie存储在客户端,安全性低,且大小及个数受浏览器限制。
Session存储在服务器端,安全性高,但影响系统性能,所以Session并不会一直都存在的,一定的时间之后,服务器上的Session就被销毁。
应用:记住密码、及表单重复提交。
将用户名和密码以Cookie的方式存放在客户端,客户端请求一个需要登陆的资源时,重新执行一次登录操作,新建Session,并更新Cookie中的SessionId,由此达到记住密码的功能。
为防止表单的重复提交,为每一次的请求都生成唯一的标识token,并保存在用户的 Session 中,检查请求的token是否与session中的相同,若相同则为不为重复提交,处理请求并删除token,若不同则为重复提交表单。